home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr26
/
netprog.zip
/
NETPROG.TAR
/
ipc
/
mainmsgqser1.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-17
|
1KB
|
73 lines
#include <stdio.h>
#include "mesg.h"
#include "msgq.h"
Mesg mesg;
main()
{
int id;
/*
* Create the message queue, if required.
*/
if ( (id = msgget(MKEY1, PERMS | IPC_CREAT)) < 0)
err_sys("server: can't get message queue 1");
server(id);
exit(0);
}
server(id)
int id;
{
int n, filefd;
char errmesg[256], *sys_err_str();
/*
* Read the filename message from the IPC descriptor.
*/
mesg.mesg_type = 1L; /* receive messages of this type */
if ( (n = mesg_recv(id, &mesg)) <= 0)
err_sys("server: filename read error");
mesg.mesg_data[n] = '\0'; /* null terminate filename */
mesg.mesg_type = 2L; /* send messages of this type */
if ( (filefd = open(mesg.mesg_data, 0)) < 0) {
/*
* Error. Format an error message and send it back
* to the client.
*/
sprintf(errmesg, ": can't open, %s\n", sys_err_str());
strcat(mesg.mesg_data, errmesg);
mesg.mesg_len = strlen(mesg.mesg_data);
mesg_send(id, &mesg);
} else {
/*
* Read the data from the file and send a message to
* the IPC descriptor.
*/
while ( (n = read(filefd, mesg.mesg_data, MAXMESGDATA)) > 0) {
mesg.mesg_len = n;
mesg_send(id, &mesg);
}
close(filefd);
if (n < 0)
err_sys("server: read error");
}
/*
* Send a message with a length of 0 to signify the end.
*/
mesg.mesg_len = 0;
mesg_send(id, &mesg);
}